//
//  CZPopoverAnimation.swift
//  GZWeibo007
//
//  Created by Apple on 15/12/31.
//  Copyright © 2015年 Apple. All rights reserved.
//

import UIKit

/// 控制modal出来的动画
class CZPopoverAnimation: NSObject, UIViewControllerAnimatedTransitioning {

    // 转场动画的时间
    func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
        return 0.25
    }
    
    /*
        transitionContext: UIViewControllerContextTransitioning提供转场需要的相关元素
            1.containerView(): 获取容器视图
            2.completeTransition(): 告诉系统转场动画是否完成.非常重要
            3.viewControllerForKey(key: String): 获取控制器
                3.1: UITransitionContextFromViewControllerKey: 
                    如果是弹出控制器,那么获取到的是调用presentViewController方法的控制器
                    如果是关闭控制器,那么获取到的是modal出来的控制器
                3.2: UITransitionContextToViewControllerKey
                    如果是弹出控制器,那么获取到的是modal出来的控制器
                    如果是关闭控制器,那么获取到的是调用presentViewController方法的控制器
            4.viewForKey(key: String): 获取控制器的view
                4.1: UITransitionContextFromViewKey
                    如果是弹出控制器,那么获取到的是调用presentViewController方法的控制器的view
                    如果是关闭控制器,那么获取到的是modal出来的控制器的view
                4.2: UITransitionContextToViewKey
                    如果是弹出控制器,那么获取到的是modal出来的控制器的view
                    如果是关闭控制器,那么获取到的是调用presentViewController方法的控制器的view
    */
    
    // 具体实现转场动画
    // 注意: 当实现这个方法后,需要我们手动将元素添加到容器视图,充分地让我们自定义转场动画
    func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
        // 获取到modal出来的控制器的view
        let toView = transitionContext.viewForKey(UITransitionContextToViewKey)!
        
        // 将modal出来的控制器的view添加到容器视图
        transitionContext.containerView()?.addSubview(toView)
        
        // 设置y方向的缩放
        toView.transform = CGAffineTransformMakeScale(1, 0)
        
        // 修改锚点
        toView.layer.anchorPoint = CGPoint(x: 0.5, y: 0)
        
        // 做动画
        UIView.animateWithDuration(transitionDuration(transitionContext), animations: { () -> Void in
            // 清空transform
            toView.transform = CGAffineTransformIdentity
            }) { (_) -> Void in
                // 调用completeTransition告诉系统转场动画完成了
                transitionContext.completeTransition(true)
        }
    }
}
